package com.xuecheng.media.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.xuecheng.base.model.PageParams;
import com.xuecheng.base.model.PageResult;
import com.xuecheng.base.result.RestResponse;
import com.xuecheng.media.model.dto.QueryMediaParamsDTO;
import com.xuecheng.media.model.dto.UploadFileResultDTO;
import com.xuecheng.media.model.po.MediaFiles;
import org.springframework.web.multipart.MultipartFile;

/**
 * <p>
 * 媒资信息 服务类
 * </p>
 *
 * @author 勾新杰
 * @since 2025-01-16
 */
public interface IMediaFilesService extends IService<MediaFiles> {

    /**
     * 媒资文件分页查询
     * @param pageParams 分页参数
     * @param queryMediaParamsDTO 查询条件
     * @return 查询结果
     */
    PageResult<MediaFiles> queryMediaFiles(PageParams pageParams, QueryMediaParamsDTO queryMediaParamsDTO);

    /**
     * 文件上传
     * @param file 文件
     * @return 上传结果
     */
    UploadFileResultDTO upload(MultipartFile file, Long courseId);

    /**
     * 检查文件是否存在
     * @param fileMd5 文件md5
     * @return 文件信息
     */
    RestResponse<Boolean> checkFile(String fileMd5);

    /**
     * 检查分块文件是否存在
     * @param fileMd5 文件md5
     * @param chunk 文件分块序号
     * @return 文件信息
     */
    RestResponse<Boolean> checkChunk(String fileMd5, int chunk);

    /**
     * 上传分块文件
     * @param file 文件
     * @param fileMd5 文件md5
     * @param chunk 文件分块序号
     */
    RestResponse<String> uploadChunk(MultipartFile file, String fileMd5, int chunk);

    /**
     * 合并分块文件
     * @param fileMd5 文件md5
     * @param fileName 文件名称
     * @param chunkTotal 分块文件总数
     * @return 合并结果
     */
    RestResponse<String> mergeChunks(String fileMd5, String fileName, Integer chunkTotal);

    /**
     * 预览文件
     * @param id 文件id
     * @return 文件信息
     */
    String preview(String id);

    /**
     * 删除文件
     * @param id 文件id
     * @return 删除结果
     */
    RestResponse<Boolean> deleteById(String id);

    /**
     * 删除课程静态化页面
     * @param courseId 课程id
     * @return 删除结果
     */
    RestResponse<Boolean> deleteCourseHtml(Long courseId);
}
